# encoding: UTF-8

class ServiceController < ActionController::Base

  before_filter :autenticar

  def atualizar_exame
    if request.post?
      # Cria o exame caso ele não exista
      if params[:inicio].nil?
        render :text => "Dados invalidos de exame", :status => 400
      else
        @exame = Dados::Exame.where(:inicio => params[:inicio], :paciente_id => @paciente.id).first
        if not @exame
          @exame = Dados::Exame.new(:inicio => params[:inicio], :paciente_id => @paciente.id)
          if not @exame.save
            render :text => "Erro ao salvar exame", :status => 400
            return
          end
        end
        # Verifica os tipos de dados recebidos
        error_msg = @exame.atualizar_dados(params)
        if error_msg.empty?
          render :text => "OK", :status => 200
        else
          render :text => error_msg, :status => 400
        end
      end
    else
      render :text => "Requisicao nao e um POST", :status => 405
    end
  end

  def verificar_autenticacao
    Log.create(:login => @paciente.login, :mensagem => "Verificação de autenticação no serviço.")
    render :text => "OK", :status => 200
  end

  private

  def autenticar
    auth_token = ""
    # Por enquanto implementa a autenticação via "basic authentication"
    autenticado = authenticate_with_http_basic do |login, senha|
      @paciente = Usuarios::Paciente.where(:login => login).first
      if @paciente
        auth_token = Digest::SHA1.hexdigest("#{senha}:_Y%l9#Bz5k:#{login}")
        @paciente.validar_login(senha)
      end
    end

    if not autenticado
      render :text => "Ação não permitida", :status => 401
    elsif params[:authenticity_token] != auth_token
      render :text => "Solicitação não reconhecida", :status => 401
    end
  end

end
